package Xml;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.ParserConfigurationException;

import Authorization.User;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

/**
 * Created with IntelliJ IDEA.
 * User: Igor
 * Date: 24.11.13
 * Time: 11:20
 * To change this template use File | Settings | File Templates.
 */
public class DOMUsersParser {
    private ArrayList<User> users = new ArrayList<>();
    private User user;
    private String filePath = "C:\\JAVA\\src\\Xml\\Users.xml";
    private Document document;

    /**
     * Метод возвращает список User-ов, не делал никаких обверток потму что не знал какую сделаешь архитектуру
     * поменяешь под себя надеюсь суть ясна.
     * @return
     * @throws IOException
     * @throws SAXException
     * @throws ParserConfigurationException
     */
    public ArrayList<User> getUsers() throws IOException, SAXException, ParserConfigurationException {
        this.loadDocument();
        this.filedUserList();
        return users;
    }

    private void loadDocument() throws ParserConfigurationException, IOException, SAXException {
        File xmlFile = new File(filePath);
        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
        document = documentBuilder.parse(xmlFile);
        document.getDocumentElement().normalize();
    }

    private void filedUserList() {
        NodeList nodeList = document.getElementsByTagName("user");
        for (int i = 0 ; i < nodeList.getLength() ; i++) {
            Node node = nodeList.item(i);
            if (node instanceof Element) {
                Element element = (Element)node;
                String login = element.getElementsByTagName("login").item(0).getChildNodes().item(0).getNodeValue();
                String password = element.getElementsByTagName("password").item(0).getChildNodes().item(0).getNodeValue();
                user = new User(login, password);
                users.add(user);
            }
        }
    }
}
